
//创建一个数组原型对象
var arrayProtoType = Object.create(Array.prototype);
var ArrayProto = [];
//监听到属性发生变化时执行以下方法
ArrayProto.dataChanged =function(method,input){
    
}
ArrayProto.sliceChanged =function(method,input){
    
}
ArrayProto["splicesend"] =function(){
    return arrayProtoType["splice"].apply(this, arguments);
}
//重构原型里的方法，同时将重构后的方法赋值给自定义好的数组
Object.getOwnPropertyNames(Array.prototype).forEach(function (key) {
    //用的什么方法,就抓什么方法,其他的不变
    //不要用if/return 我之前写的时候 本来splice一定是function的,居然可以进splice和function的代码快
    if (key === "splice") {
        ArrayProto[key] = function () {
            listenProtoMethods("splice",arguments);
            return arrayProtoType[key].apply(this, arguments);
        };
    }else 
    if (key === "slice") {
        ArrayProto[key] = function () {
            listenSliceMethods(key,arguments);
            return arrayProtoType[key].apply(this, arguments);
            
        };
    }else
    if (typeof arrayProtoType[key] === "function") {
        ArrayProto[key] = function () {
            return arrayProtoType[key].apply(this, arguments);
        };
    } else {
        listenProps(key);
        ArrayProto[key] = arrayProtoType[key];
    }
});

function listenSliceMethods(method,input){
    ArrayProto.sliceChanged(method,input);
}
function listenProtoMethods(method,input) {
 
  //当监听到数组函数变化时执行回调逻辑callback
  ArrayProto.dataChanged(method,input);
  
}
 
function listenProps(prop) {

    //当监听到数组属性变化时执行回调逻辑callback
    // ArrayProto.dataChanged();
}


// var arryWatched = [];
// //将被监听的数组原型链指向新构造的原型对象
// arryWatched.__proto__ = ArrayProto;

export const proxyarr = {ArrayProto}